#ifndef HISTORYMESSAGEDIALOG_H
#define HISTORYMESSAGEDIALOG_H

#include <QDialog>
#include <QWidget>
#include <QGridLayout>
#include <QLineEdit>
#include <QRadioButton>
#include <QPushButton>
#include <QLabel>

#include "model/data.h"

/////////////////////////////////////////////////////
/// 表示一个历史消息元素
/////////////////////////////////////////////////////

class HistoryItem : public QWidget {
    Q_OBJECT
public:
    static HistoryItem* makeHistoryItem(const model::Message& message);
};

/////////////////////////////////////////////////////
/// 展示历史消息窗口
/////////////////////////////////////////////////////

class HistoryMessageDialog : public QDialog
{
    Q_OBJECT
public:
    HistoryMessageDialog(QWidget* parent = nullptr);

    // 在窗口中添加一个历史消息
    void addHistoryItem(const model::Message& message);

    // 清空窗口中所有的历史消息
    void clear();

    void clickSearchBtn();
    void clickSearchBtnDone();

private:
    // 持有所有的历史消息
    QWidget* container;

    QLineEdit* searchEdit;
    QRadioButton* keyRadioBtn;
    QRadioButton* timeRidioBtn;

    QDateTimeEdit* begTimeEdit;
    QDateTimeEdit* endTimeEdit;

    void initScrollArea(QGridLayout* layout);
};

/////////////////////////////////////////////////////
/// 展示图片历史消息
/////////////////////////////////////////////////////

class ImageButton : public QPushButton {
    Q_OBJECT
public:
    ImageButton(const QString& fileId, const QByteArray& content);
    void updateUI(const QString& fileId, const QByteArray& content);

private:
    QString fileId;
};

/////////////////////////////////////////////////////
/// 展示文件历史消息
/////////////////////////////////////////////////////

class FileLabel : public QLabel {
    Q_OBJECT
public:
    FileLabel(const QString& fileId, const QByteArray& content, const QString& fileName);
    void getContentDone(const QString& fileId, const QByteArray& content);

    void mousePressEvent(QMouseEvent* event) override;

private:
    QString fileId;
    QString fileName;
    QByteArray content;
    bool loadDone = false;
};

/////////////////////////////////////////////////////
/// 展示语音历史消息
/////////////////////////////////////////////////////

class SpeechLabel : public QLabel {
    Q_OBJECT
public:
    SpeechLabel(const QString& fileId, const QByteArray& content);
    void getContentDone(const QString& fileId, const QByteArray& content);

    void mousePressEvent(QMouseEvent* event) override;

private:
    QString fileId;
    QByteArray content;
    bool loadDone = false;
};

#endif // HISTORYMESSAGEDIALOG_H
